package com.stefanini.pe.bbva.bp.in.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;

import org.primefaces.event.TabChangeEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

import com.pe.bbva.utils.Constantes;
import com.stefanini.pe.bbva.bp.in.bo.datasource.DetallePorContratos;
import com.stefanini.pe.bbva.bp.in.bo.iface.RebalanceoBOIface;
import com.stefanini.pe.bbva.bp.in.model.ExportarModel;
import com.stefanini.pe.bbva.bp.in.model.ListasReporteModel;
import com.stefanini.pe.bbva.bp.in.model.PosicionModel;
import com.stefanini.pe.bbva.bp.in.security.AuthorizationService;
import com.stefanini.pe.bbva.bp.in.to.Cliente;
import com.stefanini.pe.bbva.bp.in.to.DividendoLiberada;
import com.stefanini.pe.bbva.bp.in.to.ListaGenerica;
import com.stefanini.pe.bbva.bp.in.to.PosicionContrato;
import com.stefanini.pe.bbva.bp.in.to.PosicionDetalle;
import com.stefanini.pe.bbva.bp.in.utils.ConstantesWeb;
import com.stefanini.pe.bbva.bp.in.utils.SpringApplicationContext;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Controller(value = "posicionController")
@RequestScoped
public class PosicionController extends GenericoController{
	@Autowired
	private PosicionModel posicionModel;
	@Autowired  
    @Qualifier("rebalanceoBO")
	private RebalanceoBOIface rebalanceoBO;
	@Autowired
	private ListasReporteModel listaReporteModel;
	
	private Integer idxTabResult;
	
	//Nuevo
	private Date fechaInicioDiv;
	private Date fechaFinDiv;
	private Date fechaInicioLib;
	private Date fechaFinLib;
	private List<DividendoLiberada> listaDividendos;
	private List<DividendoLiberada> listaLiberadas;
	private List<String> listCtaValor;
	private List<SelectItem> listCboCtaValor;
	private String strIDCtaValorDiv;
	private String strIDCtaValorLib;
	private boolean habilitarDivSig;
	private boolean habilitarDivAnt;
	private boolean habilitarLibSig;
	private boolean habilitarLibAnt;
	private List<String> listDivAnt;
	private List<String> listLibAnt;
	
	///////////test dividendo y liberado
	private List<DividendoLiberada> listOb1;
	private DividendoLiberada ob2;
	private DividendoLiberada ob3;
	private int countDiv;
	private List<DividendoLiberada> listOb11;
	private DividendoLiberada ob22;
	private DividendoLiberada ob33;
	private int countLib;
	///////////
	
	public void onPageLoad(ComponentSystemEvent event) {
		try {
			AuthorizationService auth = (AuthorizationService)SpringApplicationContext.getBean("authorizationService");
			if (auth.isSessionClientAndContextValide() && !FacesContext.getCurrentInstance().isPostback()) {
				System.out.println("PosicionController... is not Postback");
				
				idxTabResult = 0;
				getSessionMap().put("nomReporte","posicionActivoContratos");
				getSessionMap().put(ConstantesWeb.Reportes.FLAG_REPORTE_POSITION_ACTIVO,ConstantesWeb.Reportes.FLAG_POSITION_ACTIVO);
				inicializaListas();

				fechaInicioDiv = null;
				fechaFinDiv = null;
				fechaInicioLib = null;
				fechaFinLib = null;
				
				listaDividendos = new ArrayList<DividendoLiberada>();
				listaLiberadas = new ArrayList<DividendoLiberada>();
				listCtaValor = new ArrayList<String>();
				listCboCtaValor = new ArrayList<SelectItem>();
				strIDCtaValorDiv = "";
				strIDCtaValorLib = "";
				habilitarDivSig = false;
				habilitarDivAnt = false;
				habilitarLibSig = false;
				habilitarLibAnt = false;
				validarDividendosLiberadas();
				
				//test
				initTestWS();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void initTestWS(){
		listOb1 = new ArrayList<DividendoLiberada>();
		for(int i=0; i<15; i++){
			DividendoLiberada ob1 = new DividendoLiberada();
	    	ob1.setNombreValor(""+(Math.random() * 300 + 1));
			ob1.setCodigoIsin(""+(Math.random() * 300 + 1));
			ob1.setAccionDerecho(""+(Math.random() * 300 + 1));
			ob1.setRatio("21,25");
			ob1.setFechaCorte("24/12/2019");
			ob1.setFechaEntrega("24/12/2019");
			ob1.setFechaPago("24/12/2019");
			ob1.setMoneda("PEN");
			ob1.setImporteBruto(""+(Math.random() * 300 + 1));
			ob1.setImporteNeto(""+(Math.random() * 300 + 1));
			listOb1.add(ob1);
		}
		
		ob2 = new DividendoLiberada();
    	ob2.setNombreValor(""+(Math.random() * 300 + 1));
		ob2.setCodigoIsin(""+(Math.random() * 300 + 1));
		ob2.setAccionDerecho(""+(Math.random() * 300 + 1));
		ob2.setRatio("22,25");
		ob2.setFechaCorte("24/12/2019");
		ob2.setFechaEntrega("24/12/2019");
		ob2.setFechaPago("24/12/2019");
		ob2.setMoneda("PEN");
		ob2.setImporteBruto(""+(Math.random() * 300 + 1));
		ob2.setImporteNeto(""+(Math.random() * 300 + 1));
		
		ob3 = new DividendoLiberada();
    	ob3.setNombreValor(""+(Math.random() * 300 + 1));
		ob3.setCodigoIsin(""+(Math.random() * 300 + 1));
		ob3.setAccionDerecho(""+(Math.random() * 300 + 1));
		ob3.setRatio("23,25");
		ob3.setFechaCorte("24/12/2019");
		ob3.setFechaEntrega("24/12/2019");
		ob3.setFechaPago("24/12/2019");
		ob3.setMoneda("PEN");
		ob3.setImporteBruto(""+(Math.random() * 300 + 1));
		ob3.setImporteNeto(""+(Math.random() * 300 + 1));
		
		//--------------------------------
		listOb11 = new ArrayList<DividendoLiberada>();
		for(int i=0; i<15; i++){
			DividendoLiberada ob11 = new DividendoLiberada();
	    	ob11.setNombreValor(""+(Math.random() * 300 + 1));
			ob11.setCodigoIsin(""+(Math.random() * 300 + 1));
			ob11.setAccionDerecho(""+(Math.random() * 300 + 1));
			ob11.setRatio("11,25");
			ob11.setFechaCorte("24/12/2019");
			ob11.setFechaEntrega("24/12/2019");
			ob11.setTotalAccion(""+(Math.random() * 300 + 1));
			listOb11.add(ob11);
		}
		
		ob22 = new DividendoLiberada();
    	ob22.setNombreValor(""+(Math.random() * 300 + 1));
		ob22.setCodigoIsin(""+(Math.random() * 300 + 1));
		ob22.setAccionDerecho(""+(Math.random() * 300 + 1));
		ob22.setRatio("12,25");
		ob22.setFechaCorte("24/12/2019");
		ob22.setFechaEntrega("24/12/2019");
		ob22.setTotalAccion(""+(Math.random() * 300 + 1));
		
		ob33 = new DividendoLiberada();
    	ob33.setNombreValor(""+(Math.random() * 300 + 1));
		ob33.setCodigoIsin(""+(Math.random() * 300 + 1));
		ob33.setAccionDerecho(""+(Math.random() * 300 + 1));
		ob33.setRatio("13,25");
		ob33.setFechaCorte("24/12/2019");
		ob33.setFechaEntrega("24/12/2019");
		ob33.setTotalAccion(""+(Math.random() * 300 + 1));;
	}
	
	public void validarDividendosLiberadas(){
		List listPosContrato = posicionModel.getListaContratoProductos();
		if(listPosContrato != null && posicionModel.getListaContratoProductos().size() > 0){
			for(int i=0; i<listPosContrato.size(); i++){
				PosicionContrato pc = (PosicionContrato)listPosContrato.get(i);
				if(!pc.isShowIsDataFooter()){
					if(Constantes.CONS_CODIGO_CUENTAVALOR.equals(pc.getCodcategoriaporcontrato())){
						String codContrato = Util.getStringF(pc.getCodcontrato()).replaceAll("-", "");
						if(codContrato.length() == 20){
							listCtaValor.add(codContrato.substring(12, 19));
						}
					}
				}
			}
			cargarComboCuentaValor();
		}
	}
	
	private void cargarComboCuentaValor(){
		strIDCtaValorDiv = "";
		strIDCtaValorLib = "";
		listCboCtaValor = new ArrayList<SelectItem>();
		for(String ob: listCtaValor){
			listCboCtaValor.add(new SelectItem(ob, ob));	
		}
	}
	
	public void onTabChange(TabChangeEvent event) {
		if(idxTabResult == 0){
			getSessionMap().put("nomReporte","posicionActivoContratos");
		}else if(idxTabResult == 1){
			getSessionMap().put("nomReporte","posicionActivoDetalle");
		}
	}

	private void inicializaListas() {
		this.posicionModel.setListaContratoProductos(new ArrayList());
		this.posicionModel.setListaDetalleProductos(new ArrayList());
		this.posicionModel.setRebalanceoContratoTotal(new PosicionContrato());
		this.posicionModel.setRebalanceoDetalleTotal(new PosicionDetalle());
		this.posicionModel.setListaContratoProductosRebalanceado(new ArrayList());
		this.posicionModel.setListaDetalleProductosRebalanceado(new ArrayList());
		this.posicionModel.setRebalanceoContratoTotalRebalanceado(new PosicionContrato());
		this.posicionModel.setRebalanceoDetalleTotalRebalanceado(new PosicionDetalle());
		
		// Add RVC 07-12
		this.posicionModel.setListaIdsPosicionContratos(null);
		this.posicionModel.setSelectAllContratoProductos(false);
		
		this.posicionModel.setListaIdsPosicionContratosDetalle(null);
		this.posicionModel.setSelectAllContratoProductosDetalle(false);
		//
		FacesContext ctx = FacesContext.getCurrentInstance();
		Cliente cliente = (Cliente)((HttpSession) ctx.getExternalContext().getSession(false)).
			getAttribute(Constantes.OBJETO_CLIENTE_SESSION);
		
		//Fixed tab Contratos
		List listaContratoProductos1 = new ArrayList();
		rebalanceoBO.listarPosicionContrato(cliente.getCodcliente(),
											this.posicionModel.getRebalanceoContratoTotal(),
											listaContratoProductos1);
		List<PosicionContrato> listTempPosContrato = new ArrayList<PosicionContrato>();
		for(int i=0; i<listaContratoProductos1.size(); i++){
			ListaGenerica listaGenerica = (ListaGenerica)listaContratoProductos1.get(i);
			PosicionContrato obj = (PosicionContrato)listaGenerica.getObj();
			if(listaGenerica !=null && listaGenerica.getSubLista().size() > 0){
				for(int j=0; j<listaGenerica.getSubLista().size(); j++){
					PosicionContrato obRowSubLista = (PosicionContrato)listaGenerica.getSubLista().get(j);
					if(obRowSubLista != null && obj != null){
						obRowSubLista.setOpcionNoDepositos(obj.isOpcionNoDepositos());
						obRowSubLista.setOpcionCuentasPersonales(obj.isOpcionCuentasPersonales());
						obRowSubLista.setOpcionFondosMutuos(obj.isOpcionFondosMutuos());
						obRowSubLista.setOpcionValores(obj.isOpcionValores());
						listTempPosContrato.add(obRowSubLista);
					}
				}
			}
			if(obj != null){
				obj.setShowIsDataFooter(true);
				listTempPosContrato.add(obj);
			}
		}
		this.posicionModel.setListaContratoProductos(listTempPosContrato);
		
		//Fixed tab Detalle
		List listaDetalleProductos1 = new ArrayList();
		rebalanceoBO.listarPosicionDetalle(cliente.getCodcliente(),
											this.posicionModel.getRebalanceoDetalleTotal(),
											listaDetalleProductos1);
		List<PosicionDetalle> listTempPosDetalle = new ArrayList<PosicionDetalle>();
		for(int i=0; i<listaDetalleProductos1.size(); i++){
			ListaGenerica listaGenerica = (ListaGenerica)listaDetalleProductos1.get(i);
			PosicionDetalle obj = (PosicionDetalle)listaGenerica.getObj();
			if(listaGenerica !=null && listaGenerica.getSubLista().size() > 0){
				for(int j=0; j<listaGenerica.getSubLista().size(); j++){
					PosicionDetalle obRowSubLista = (PosicionDetalle)listaGenerica.getSubLista().get(j);
					if(obRowSubLista != null && obj != null){
						obRowSubLista.setTasa(Util.formatDouble3Special(obRowSubLista.getTasa()));
						obRowSubLista.setPrecioactual(Util.formatDouble3Special(obRowSubLista.getPrecioactual()));
						obRowSubLista.setPreciocompra(Util.formatDouble3Special(obRowSubLista.getPreciocompra()));
						listTempPosDetalle.add(obRowSubLista);
					}
				}
			}
			if(obj != null){
				obj.setShowIsDataFooter(true);
				listTempPosDetalle.add(obj);
			}
		}
		this.posicionModel.setListaDetalleProductos(listTempPosDetalle);
		
		this.obtenerListaRepPosActiContrato(listaContratoProductos1);
		this.obtenerListaRepPosActiDetalle(listaDetalleProductos1);
	}	

	public void obtenerListaRepPosActiContrato(List listaContratoProductos1){
		List<DetallePorContratos> listarDetalleContrato=new ArrayList<DetallePorContratos>();
		DetallePorContratos detallePorContratos=null;
		List listaContratoProductos=listaContratoProductos1;
		
		for (int i=0;i< listaContratoProductos.size();i++) {
			List<PosicionContrato> listaTotal=new ArrayList<PosicionContrato>();
			detallePorContratos=new DetallePorContratos();
			ListaGenerica element = (ListaGenerica)listaContratoProductos1.get(i);

			detallePorContratos.setListaDetalle((ArrayList<PosicionContrato>)element.getSubLista());
			listaTotal.add((PosicionContrato)element.getObj());				
			if(i==listaContratoProductos.size()-1){
				listaTotal.add(this.posicionModel.getRebalanceoContratoTotal());	
			}
			detallePorContratos.setTotal(listaTotal);
			listarDetalleContrato.add(detallePorContratos);
		}
		listaReporteModel.setListaReportePosicionContratos(listarDetalleContrato);
	}
	
	public void obtenerListaRepPosActiDetalle(List listaDetalleProductos1){
		List<DetallePorContratos> listarDetalleContrato=new ArrayList<DetallePorContratos>();
		DetallePorContratos detallePorContratos=null;
		List listaDetalleProductos=listaDetalleProductos1;
		List listaDetalleProductos_aux;
		for (int i=0;i< listaDetalleProductos.size();i++) {
			List<PosicionDetalle> listaTotal=new ArrayList<PosicionDetalle>();
			detallePorContratos=new DetallePorContratos();
			ListaGenerica element = (ListaGenerica)listaDetalleProductos.get(i);
			if(element.getSubLista().size()!=0){
				listaDetalleProductos_aux = new ArrayList();
				for(Iterator iterator = element.getSubLista().iterator(); iterator.hasNext();){
					PosicionDetalle pd = (PosicionDetalle)iterator.next();
					if(pd.getIdcontratodetalle() != null){
						pd.setCodcontratoF(Util.formatContrato(pd.getIdcontratodetalle()));
						pd.setStrparticiparebalanceo(pd.isIndparticiparebalanceo()?"S":"N");
					}
					listaDetalleProductos_aux.add(pd);
				}
				detallePorContratos.setListaDetalle(listaDetalleProductos_aux);
			}
			listaTotal.add((PosicionDetalle)element.getObj());
			if(i==listaDetalleProductos.size()-1){
				listaTotal.add(this.posicionModel.getRebalanceoDetalleTotal());	
			}
			detallePorContratos.setTotal(listaTotal);
			listarDetalleContrato.add(detallePorContratos);			
		}
		listaReporteModel.setListaReportePosicionDetalle(listarDetalleContrato);
	}

	// ADD RVC 07-2012
    public void capturarIdsContratos(Object ob) { //---------
		try {
			boolean flag = true;
			List<PosicionContrato> lstDTO = new ArrayList<PosicionContrato>();
			List<PosicionContrato> lstDTOSession = new ArrayList<PosicionContrato>();
			
			PosicionContrato contrato = (PosicionContrato) ob;
			
			if (posicionModel.getListaIdsPosicionContratos() != null) {
				lstDTO = posicionModel.getListaIdsPosicionContratos();
				lstDTOSession.addAll(lstDTO);
			}
			if (lstDTO != null && lstDTO.size() > 0) {
        		for (PosicionContrato obj : lstDTO) {
        			if (contrato.getCodcontrato().trim().equalsIgnoreCase(obj.getCodcontrato().trim())) {
        				int pos = -1;
        				int cont = 0;
        				for (PosicionContrato c : lstDTOSession) {
        					if(c.getCodcontrato().trim().equalsIgnoreCase(contrato.getCodcontrato().trim())){
        						pos = cont;
        						break;
        					}
        					cont++;
        				}
        				lstDTOSession.remove(pos);
        				posicionModel.setListaIdsPosicionContratos(lstDTOSession);
        				flag = false;
        				this.posicionModel.setSelectAllContratoProductos(false);
        			}
        		}
        		if (flag) {
            		lstDTOSession.add(contrato);
            		posicionModel.setListaIdsPosicionContratos(lstDTOSession);
				}
        	} else {
        		lstDTOSession.add(contrato);
        		posicionModel.setListaIdsPosicionContratos(lstDTOSession);
        	}
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().
						put("listaIdsContratos", posicionModel.getListaIdsPosicionContratos());
		} catch (Exception e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}
    
    public void capturarIdsContratosTodos() { //----
		try {
			boolean band = posicionModel.isSelectAllContratoProductos();
			if (band) {
				if (posicionModel.getListaContratoProductos() != null && posicionModel.getListaContratoProductos().size() > 0) {
					
					this.posicionModel.setListaIdsPosicionContratos(null);
					List<PosicionContrato> lstDTOSession = new ArrayList<PosicionContrato>();
					
					for (Object obj : posicionModel.getListaContratoProductos()) {
						
						ListaGenerica objLG = (ListaGenerica) obj;
						
						if (objLG.getSubLista().size()>0){
							
							for (Object objSL : objLG.getSubLista()) {
								((PosicionContrato) objSL).setSbcbPosicionContrato(true);
								lstDTOSession.add(((PosicionContrato) objSL));
							}
						}
					}
					posicionModel.setListaIdsPosicionContratos(lstDTOSession); 
				}
			} else {
				if (posicionModel.getListaContratoProductos() != null && posicionModel.getListaContratoProductos().size() > 0) {
					for (Object obj : posicionModel.getListaContratoProductos()) {
						ListaGenerica objLG = (ListaGenerica) obj;
						
						if (objLG.getSubLista().size()>0){
							for (Object objSL : objLG.getSubLista()) {
								((PosicionContrato) objSL).setSbcbPosicionContrato(false);
							}
						}
					}
					posicionModel.setListaIdsPosicionContratos(null);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

    public void capturarIdsContratosDetalle(Object ob) { //---
		try {
			boolean flag = true;
			List<PosicionDetalle> lstDTO = new ArrayList<PosicionDetalle>();
			List<PosicionDetalle> lstDTOSession = new ArrayList<PosicionDetalle>();
			
			PosicionDetalle contrato = (PosicionDetalle) ob;
			
			if (posicionModel.getListaIdsPosicionContratosDetalle() != null) {
				lstDTO = posicionModel.getListaIdsPosicionContratosDetalle();
				lstDTOSession.addAll(lstDTO);
			}
			if (lstDTO != null && lstDTO.size() > 0) {
        		for (PosicionDetalle obj : lstDTO) {
        			if (contrato.getIdcontratodetalle().trim().equalsIgnoreCase(obj.getIdcontratodetalle().trim())) {
        				int pos = -1;
        				int cont = 0;
        				for (PosicionDetalle c : lstDTOSession) {
        					if(c.getIdcontratodetalle().trim().equalsIgnoreCase(contrato.getIdcontratodetalle().trim())){
        						pos = cont;
        						break;
        					}
        					cont++;
        				}
        				lstDTOSession.remove(pos);
        				posicionModel.setListaIdsPosicionContratosDetalle(lstDTOSession);
        				flag = false;
        				this.posicionModel.setSelectAllContratoProductosDetalle(false);
        			}
        		}
        		if (flag) {
            		lstDTOSession.add(contrato);
            		posicionModel.setListaIdsPosicionContratosDetalle(lstDTOSession);
				}
        	} else {
        		lstDTOSession.add(contrato);
        		posicionModel.setListaIdsPosicionContratosDetalle(lstDTOSession);
        	}
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().
				put("listaIdsContratosDetalle", posicionModel.getListaIdsPosicionContratosDetalle());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
    
    public void capturarIdsContratosTodosDetalle() {  //---------
		try {
			boolean band = posicionModel.isSelectAllContratoProductosDetalle();
			if (band) {
				if (posicionModel.getListaDetalleProductos() != null && posicionModel.getListaDetalleProductos().size() > 0) {
					
					this.posicionModel.setListaIdsPosicionContratosDetalle(null);
					List<PosicionDetalle> lstDTOSession = new ArrayList<PosicionDetalle>();
					
					for (Object obj : posicionModel.getListaDetalleProductos()) {
						ListaGenerica objLG = (ListaGenerica) obj;
						if (objLG.getSubLista().size()>0){
							for (Object objSL : objLG.getSubLista()) {
								((PosicionDetalle) objSL).setSbcbPosicionContrato(true);
								lstDTOSession.add(((PosicionDetalle) objSL));
							}
						}
					}
					posicionModel.setListaIdsPosicionContratosDetalle(lstDTOSession); 
				}
			} else {
				if (posicionModel.getListaDetalleProductos() != null && posicionModel.getListaDetalleProductos().size() > 0) {
					for (Object obj : posicionModel.getListaDetalleProductos()) {
						ListaGenerica objLG = (ListaGenerica) obj;
						if (objLG.getSubLista().size()>0){
							for (Object objSL : objLG.getSubLista()) {
								((PosicionDetalle) objSL).setSbcbPosicionContrato(false);
							}
						}
					}
					posicionModel.setListaIdsPosicionContratosDetalle(null);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
    
    public void buscarDividendos(){
    	listaDividendos = new ArrayList<DividendoLiberada>();
    	listaDividendos = listOb1;
    	
    	habilitarDivSig = true;
    	habilitarDivAnt = false;
    	
    	listDivAnt = new ArrayList<String>();
    	countDiv = 0;
    }
    
    public void buscarDivAnterior(){
    	habilitarDivSig = true;
    	
    	if(listDivAnt.size() > 0){
    		String idPag = listDivAnt.get(listDivAnt.size()-1);
    		if(idPag.equals("0")){
    			listaDividendos = new ArrayList<DividendoLiberada>();
    	    	listaDividendos = listOb1;
    		}
    		if(idPag.equals("1")){
    			listaDividendos = new ArrayList<DividendoLiberada>();
    	    	listaDividendos.add(ob2);
    		}
    		if(idPag.equals("2")){
    			listaDividendos = new ArrayList<DividendoLiberada>();
    	    	listaDividendos.add(ob3);
    		}
    		listDivAnt.remove(listDivAnt.size()-1);
    		countDiv--;
    		
    		if(listDivAnt.size() == 0){
    			habilitarDivAnt = false;
    		}
    	}
    }
    
    public void buscarDivSiguiente(){
    	habilitarDivAnt = true;
    	listDivAnt.add(""+countDiv);
    	countDiv++;
    	
		String count = ""+countDiv;
		if(count.equals("0")){
			listaDividendos = new ArrayList<DividendoLiberada>();
	    	listaDividendos = listOb1;
		}
		if(count.equals("1")){
			listaDividendos = new ArrayList<DividendoLiberada>();
	    	listaDividendos.add(ob2);
		}
		if(count.equals("2")){
			listaDividendos = new ArrayList<DividendoLiberada>();
	    	listaDividendos.add(ob3);
		}
		
		if(countDiv == 2){
			habilitarDivSig = false;
		}
    }
    
    public void buscarLiberadas(){
    	listaLiberadas = new ArrayList<DividendoLiberada>();
    	listaLiberadas = listOb11;
    	
    	habilitarLibSig = true;
    	habilitarLibAnt = false;
    	
    	listLibAnt = new ArrayList<String>();
		countLib = 0;
    }
    
    public void buscarLibAnterior(){
    	habilitarLibSig = true;
    	
    	if(listLibAnt.size() > 0){
    		String idPag = listLibAnt.get(listLibAnt.size()-1);
    		if(idPag.equals("0")){
    			listaLiberadas = new ArrayList<DividendoLiberada>();
    			listaLiberadas = listOb11;
    		}
    		if(idPag.equals("1")){
    			listaLiberadas = new ArrayList<DividendoLiberada>();
    			listaLiberadas.add(ob22);
    		}
    		if(idPag.equals("2")){
    			listaLiberadas = new ArrayList<DividendoLiberada>();
    			listaLiberadas.add(ob33);
    		}
    		listLibAnt.remove(listLibAnt.size()-1);
    		countLib--;
    		
    		if(listLibAnt.size() == 0){
    			habilitarLibAnt = false;
    		}
    	}
    }
    
    public void buscarLibSiguiente(){
    	habilitarLibAnt = true;
    	listLibAnt.add(""+countLib);
		countLib++;
		
		String count = ""+countLib;
		if(count.equals("0")){
			listaLiberadas = new ArrayList<DividendoLiberada>();
			listaLiberadas = listOb11;
		}
		if(count.equals("1")){
			listaLiberadas = new ArrayList<DividendoLiberada>();
			listaLiberadas.add(ob22);
		}
		if(count.equals("2")){
			listaLiberadas = new ArrayList<DividendoLiberada>();
			listaLiberadas.add(ob33);
		}
			
		if(countLib == 2){
			habilitarLibSig = false;
		}
    }
    
    public void exportDocument(String tipoDoc){
    	if(listaDividendos.size() > 0 || listaLiberadas.size() > 0){
    		ExportarModel exportModel = (ExportarModel)SpringApplicationContext.getBean("exportarModel");
        	HashMap parametros = new HashMap();
        	exportModel.obtenerParametros(parametros);
        	parametros = exportModel.getParametros();
        	parametros.put("listaDividendos", listaDividendos);
        	parametros.put("listaLiberadas", listaLiberadas);
        	parametros.put("fechaInicioDiv", fechaInicioDiv);
        	parametros.put("fechaFinDiv", fechaFinDiv);
        	parametros.put("fechaInicioLib", fechaInicioLib);
        	parametros.put("fechaFinLib", fechaFinLib);
        	
        	if(Constantes.FILE_PDF.equals(tipoDoc)){
        		exportModel.exportPDFEmptyDS(parametros, ConstantesWeb.Reportes.PATH_JASPER_POSACT_CONT_DIVIDENDO_LIBERADO_PDF, 
            			ConstantesWeb.Reportes.REPORTE_POSACT_CONTRATO_DIVIDENDO_LIBERADO);
        	}else if(Constantes.FILE_XLS.equals(tipoDoc)){
        		exportModel.exportXLSJasperEmptyDS(parametros, ConstantesWeb.Reportes.PATH_JASPER_POSACT_CONT_DIVIDENDO_LIBERADO_XLS, 
            			ConstantesWeb.Reportes.REPORTE_POSACT_CONTRATO_DIVIDENDO_LIBERADO);
        	}
    	}
    }
	
	public PosicionModel getPosicionModel() {
		return posicionModel;
	}

	public void setPosicionModel(PosicionModel posicionModel) {
		this.posicionModel = posicionModel;
	}
	
	public ListasReporteModel getListaReporteModel() {
		return listaReporteModel;
	}

	public void setListaReporteModel(ListasReporteModel listaReporteModel) {
		this.listaReporteModel = listaReporteModel;
	}
	
	public Integer getIdxTabResult() {
		return idxTabResult;
	}

	public void setIdxTabResult(Integer idxTabResult) {
		this.idxTabResult = idxTabResult;
	}
	
	public Date getFechaInicioDiv() {
		return fechaInicioDiv;
	}

	public void setFechaInicioDiv(Date fechaInicioDiv) {
		this.fechaInicioDiv = fechaInicioDiv;
	}

	public Date getFechaFinDiv() {
		return fechaFinDiv;
	}

	public void setFechaFinDiv(Date fechaFinDiv) {
		this.fechaFinDiv = fechaFinDiv;
	}

	public Date getFechaInicioLib() {
		return fechaInicioLib;
	}

	public void setFechaInicioLib(Date fechaInicioLib) {
		this.fechaInicioLib = fechaInicioLib;
	}

	public Date getFechaFinLib() {
		return fechaFinLib;
	}

	public void setFechaFinLib(Date fechaFinLib) {
		this.fechaFinLib = fechaFinLib;
	}

	public List<DividendoLiberada> getListaDividendos() {
		return listaDividendos;
	}

	public void setListaDividendos(List<DividendoLiberada> listaDividendos) {
		this.listaDividendos = listaDividendos;
	}

	public List<DividendoLiberada> getListaLiberadas() {
		return listaLiberadas;
	}

	public void setListaLiberadas(List<DividendoLiberada> listaLiberadas) {
		this.listaLiberadas = listaLiberadas;
	}

	public List<String> getListCtaValor() {
		return listCtaValor;
	}

	public void setListCtaValor(List<String> listCtaValor) {
		this.listCtaValor = listCtaValor;
	}

	public boolean isHabilitarDivSig() {
		return habilitarDivSig;
	}

	public void setHabilitarDivSig(boolean habilitarDivSig) {
		this.habilitarDivSig = habilitarDivSig;
	}

	public boolean isHabilitarDivAnt() {
		return habilitarDivAnt;
	}

	public void setHabilitarDivAnt(boolean habilitarDivAnt) {
		this.habilitarDivAnt = habilitarDivAnt;
	}

	public boolean isHabilitarLibSig() {
		return habilitarLibSig;
	}

	public void setHabilitarLibSig(boolean habilitarLibSig) {
		this.habilitarLibSig = habilitarLibSig;
	}

	public boolean isHabilitarLibAnt() {
		return habilitarLibAnt;
	}

	public void setHabilitarLibAnt(boolean habilitarLibAnt) {
		this.habilitarLibAnt = habilitarLibAnt;
	}
	
	public List<SelectItem> getListCboCtaValor() {
		return listCboCtaValor;
	}

	public void setListCboCtaValor(List<SelectItem> listCboCtaValor) {
		this.listCboCtaValor = listCboCtaValor;
	}

	public String getStrIDCtaValorDiv() {
		return strIDCtaValorDiv;
	}

	public void setStrIDCtaValorDiv(String strIDCtaValorDiv) {
		this.strIDCtaValorDiv = strIDCtaValorDiv;
	}

	public String getStrIDCtaValorLib() {
		return strIDCtaValorLib;
	}

	public void setStrIDCtaValorLib(String strIDCtaValorLib) {
		this.strIDCtaValorLib = strIDCtaValorLib;
	}

	/******************   ******************/	
	private HttpSession getSession(){
		FacesContext context = FacesContext.getCurrentInstance();
		return (HttpSession)context.getExternalContext().getSession(false);
	}
	/******************   ******************/
}
